Forwarded from Golang
This media is not supported in your browser
VIEW IN TELEGRAM
Самое главное:
▪ В 10 раз (!) быстрее компиляция, в 2 раза меньше памяти просит;
▪ На видео как раз тест нового компилятора: 0.63 секунды против 3.35 на старом;
▪ Проект пилят с августа 2024, готово уже 80%;
Полный переход займёт годы 😢;
▪ В версии на Go не работает «манкипатчинг», что сделает API TypeScript более безопасным;
⚫ Планируют интеграцию с LLM (надеюсь, локальными);
⚫ Полный переход на TypeScript-Go не отменяет поддержку старой версии;
⚫ Кодовая база TypeScript в Go расходится с оригиналом, так что некоторые фичи (вроде JSDoc и JSX) могут полететь.
Проект в разработке с августа 2024, готово уже 80%.
Полное интервью с апдейтами тут глянуть на YouTube
▪Github: https://github.com/microsoft/typescript-go
▪Microsoft blog: https://devblogs.microsoft.com/typescript/typescript-native-port/
#dotnet #golang #programming #typescript #webdev
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Golang
This media is not supported in your browser
VIEW IN TELEGRAM
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Основная cуть:
• Рассматриваются лучшие практики и новые возможности для написания и проведения бенчмарков в Go 1.24.
• Автор делится опытом, демонстрирует примеры, объясняет, как правильно измерять производительность и избегать распространённых ошибок.
📌 Польза для разработчиков:
• Помогает оптимизировать приложения на Go, выявляя узкие места в производительности.
• Раскрывает улучшения и особенности новой версии, что важно для точного и эффективного тестирования кода.
• Предоставляет практические рекомендации, которые можно сразу применять в реальных проектах.
Эта статья будет особенно полезна тем, кто стремится повысить производительность своих приложений и глубже разобраться в нюансах бенчмаркинга на Go.
📌 Читать
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
▪ Атомарность операций: гарантирует, что каждая транзакция выполняется полностью или не выполняется вовсе, что существенно снижает риск ошибок и потери данных.
▪ Простота интеграции: интуитивно понятный API позволяет легко внедрять AtomixDB в проекты разного масштаба, от небольших приложений до распределённых систем.
▪ Масштабируемость: инструмент спроектирован с учётом современных требований к производительности, что делает его подходящим для высоконагруженных систем.
▪ Открытый исходный код: вы можете свободно изучать, модифицировать и расширять функциональность AtomixDB под специфические нужды вашего проекта.
Если вы ищете надёжное, эффективное и гибкое решение для управления данными с гарантией целостности, AtomixDB — отличный выбор для реализации современных приложений.
📌 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
«Go: Structs & Interfaces» на GetStream.io рассказывает о ключевых аспектах использования структур (structs) и интерфейсов (interfaces) в языке Go.
Основные моменты статьи:
Структуры (structs):
Рассматриваются как базовые составные типы данных, позволяющие группировать связанные поля вместе. Показаны примеры создания и использования структур для хранения информации.
Интерфейсы (interfaces):
Объясняется, как интерфейсы позволяют задавать набор методов для типов, обеспечивая абстракцию и полиморфизм. Особое внимание уделено тому, что реализация интерфейса происходит неявно — если тип содержит необходимые методы, он автоматически удовлетворяет интерфейсу.
Связь и применение:
Статья демонстрирует, как структуры и интерфейсы помогают создавать гибкую, модульную архитектуру кода, а также обсуждает лучшие практики, позволяющие эффективно использовать их для достижения чистоты и расширяемости программ.
В итоге, материал служит отличным руководством для понимания основ и тонкостей работы с типами в Go, делая акцент на важности композиции и абстракции в разработке.
📌 Читать
@golang_books
Основные моменты статьи:
Структуры (structs):
Рассматриваются как базовые составные типы данных, позволяющие группировать связанные поля вместе. Показаны примеры создания и использования структур для хранения информации.
Интерфейсы (interfaces):
Объясняется, как интерфейсы позволяют задавать набор методов для типов, обеспечивая абстракцию и полиморфизм. Особое внимание уделено тому, что реализация интерфейса происходит неявно — если тип содержит необходимые методы, он автоматически удовлетворяет интерфейсу.
Связь и применение:
Статья демонстрирует, как структуры и интерфейсы помогают создавать гибкую, модульную архитектуру кода, а также обсуждает лучшие практики, позволяющие эффективно использовать их для достижения чистоты и расширяемости программ.
В итоге, материал служит отличным руководством для понимания основ и тонкостей работы с типами в Go, делая акцент на важности композиции и абстракции в разработке.
📌 Читать
@golang_books
«Docker Cypress in 2025: How I've Perfected My E2E Testing Setup» гайд, в котором рассказывает о том, как автор усовершенствовал свою систему end-to-end тестирования, используя интеграцию Cypress с Docker.
Основное внимание уделяется тому, как создать стабильное, масштабируемое и воспроизводимое окружение для автоматизированного тестирования.
▪ Интеграция с Docker:
Автор объясняет, как использование контейнеров помогает стандартизировать тестовое окружение и устранять различия между локальной разработкой и CI/CD пайплайнами.
▪ Оптимизация процесса тестирования:
Подробно описываются шаги по настройке, конфигурации и оптимизации тестовой среды с Cypress в Docker, что позволяет ускорить и улучшить качество тестирования.
▪ Преимущества и вызовы:
Статья выделяет ключевые преимущества использования Docker в тестировании – от стабильности окружения до легкости масштабирования, а также обсуждаются возникающие проблемы и способы их решения.
▪ Современные практики CI/CD:
Рассматривается, как такая настройка вписывается в современные процессы непрерывной интеграции и доставки, делая тестирование более надежным и предсказуемым.
В итоге, статья будет полезна разработчикам и тестировщикам, которые хотят повысить эффективность своих e2e тестов и использовать передовые инструменты для создания более надежного тестового процесса.
📌 Читать
@golang_books
Основное внимание уделяется тому, как создать стабильное, масштабируемое и воспроизводимое окружение для автоматизированного тестирования.
▪ Интеграция с Docker:
Автор объясняет, как использование контейнеров помогает стандартизировать тестовое окружение и устранять различия между локальной разработкой и CI/CD пайплайнами.
▪ Оптимизация процесса тестирования:
Подробно описываются шаги по настройке, конфигурации и оптимизации тестовой среды с Cypress в Docker, что позволяет ускорить и улучшить качество тестирования.
▪ Преимущества и вызовы:
Статья выделяет ключевые преимущества использования Docker в тестировании – от стабильности окружения до легкости масштабирования, а также обсуждаются возникающие проблемы и способы их решения.
▪ Современные практики CI/CD:
Рассматривается, как такая настройка вписывается в современные процессы непрерывной интеграции и доставки, делая тестирование более надежным и предсказуемым.
В итоге, статья будет полезна разработчикам и тестировщикам, которые хотят повысить эффективность своих e2e тестов и использовать передовые инструменты для создания более надежного тестового процесса.
📌 Читать
@golang_books
Истоки и проблемы: В Go 1.18 появились типовые параметры и ограничения, которые требовали введения core types для унификации операций над обобщёнными типами. Однако это добавило сложности как в спецификацию языка, так и в понимание работы некоторых операций (например, срезов и индексирования) даже для негeneric-кода.
Изменения в Go 1.25: В предстоящем релизе Go 1.25 концепция core types была полностью удалена из спецификации. Вместо этого теперь используются более явные и понятные правила, что упрощает изучение языка и повышает ясность спецификации без изменения поведения существующего кода.
Таким образом, пост подчёркивает, что отказ от core types делает спецификацию Go проще и понятнее, одновременно открывая возможности для будущих улучшений языка.
🔗 Читать
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Поскольку стандартный компилятор Go не поддерживает PS2 и требует наличия операционной системы, автор использует TinyGo — компилятор для встраиваемых систем, который преобразует Go-код в LLVM IR, а затем в машинный код для целевой платформы.
Основные трудности связаны с архитектурой процессора PS2, известного как Emotion Engine, основанного на MIPS R5900.
Этот процессор поддерживает инструкции MIPS-III и MIPS-IV с некоторыми особенностями и отсутствием определённых функций. Автор использует SDK ps2dev, предоставляющий библиотеки для графики, ввода-вывода и других операций, однако сталкивается с необходимостью обеспечения совместимости с ABI N32 и другими специфическими требованиями.
Ricardo
Проект находится в стадии разработки, и планируется дальнейшая работа над поддержкой специфичных для PS2 функций, обработкой чисел с плавающей запятой и улучшением совместимости с LLVM.
📌 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 «Линейная алгебра»
Вторая лучшая книга по линейной алгебре с ~1000 практических задач.
Идеально для ИИ и машинного обучения.
Книга полностью бесплатна .
Прекрасно подходит для новичков.
📌 Книга
Вторая лучшая книга по линейной алгебре с ~1000 практических задач.
Идеально для ИИ и машинного обучения.
Книга полностью бесплатна .
Прекрасно подходит для новичков.
📌 Книга
В ней рассматриваются ключевые техники, сгруппированные в четыре основные категории:
1. Управление памятью и эффективность:
- Pooling объектов: Повторное использование объектов для снижения нагрузки на сборщик мусора и уменьшения накладных расходов на выделение памяти.
- Предварительное выделение памяти: Заранее задавать емкость срезов и карт для предотвращения дорогостоящих операций изменения размера.
- Выравнивание полей структур: Оптимизация расположения полей в структурах для минимизации заполнения и улучшения локальности данных.
- Избегание упаковки интерфейсов: Предотвращение скрытых выделений памяти путем отказа от ненужных преобразований типов к интерфейсам.
- Техники нулевого копирования: Минимизация копирования данных с использованием срезов и буферов.
- Эффективность памяти и сборщик мусора Go: Снижение нагрузки на сборщик мусора путем минимизации использования кучи и повторного использования памяти.
- Стековые выделения и анализ ускользания: Использование анализа ускользания для размещения значений в стеке, когда это возможно.
2. Конкурентность и синхронизация:
Пулы рабочих горутин: Контроль уровня конкурентности с помощью пулов фиксированного размера для ограничения использования ресурсов.
Атомарные операции и примитивы синхронизации: Использование атомарных операций или легковесных блокировок для управления общим состоянием.
Ленивая инициализация: Отсрочка выполнения затратных операций до момента, когда они действительно необходимы.
Совместное использование неизменяемых данных: Безопасное совместное использование данных между горутинами без блокировок путем обеспечения их неизменяемости.
goperf.dev
Эффективное управление контекстом: Использование пакета context для передачи тайм-аутов и сигналов отмены между горутинами.
3. Оптимизация ввода/вывода и пропускная способность:
Эффективное буферизирование: Использование буферизованных читателей/писателей для минимизации вызовов ввода/вывода.
Группировка операций: Объединение нескольких мелких операций для уменьшения количества раунд-трипов и повышения пропускной способности.
4. Оптимизация на уровне компилятора и настройка:
Использование флагов оптимизации компилятора: Применение флагов сборки, таких как
-gcflags и -ldflags,
для настройки производительности.Стековые выделения и анализ ускользания: Анализ того, какие значения переходят в кучу, чтобы помочь компилятору оптимизировать размещение памяти.
goperf.dev
Эти техники помогают разработчикам Go создавать более эффективные и производительные приложения, снижая задержки, улучшая использование памяти и повышая эффективность конкурентных операций.
🔗 Читать
@golang_books
Please open Telegram to view this post
VIEW IN TELEGRAM
Несмотря на то, что Go использует сборку мусора для управления памятью, команда столкнулась с необычной утечкой, связанной с объектами SqliteRows, SqliteStmt и SqliteConn.
Основные моменты статьи:
- Начало расследования: После сообщений от нескольких крупных клиентов о значительных проблемах с производительностью, команда начала собирать профили памяти и горутин, чтобы определить источник утечки.
- Исключение горутин: Анализ показал отсутствие накопления активных горутин, что позволило исключить утечки, связанные с ними.
- Обнаружение проблемы в драйвере SQLite3: График распределения объектов в памяти указал на утечку, связанную с драйвером SQLite3, используемым в приложении.
- Анализ финализаторов: Команда обнаружила, что недавно добавленный финализатор для SqliteRows может вызывать блокировку единственной горутины, ответственной за выполнение всех финализаторов в Go. Это приводило к накоплению неосвобожденных объектов и, как следствие, к утечке памяти.
Cyolo
- Использование инструмента goref: Для дальнейшего анализа команда применила инструмент goref, позволяющий картировать граф ссылок объектов в куче, что подтвердило отсутствие живых объектов, удерживающих утекшие данные, и указало на проблему в самом рантайме Go.
- Обнаружение блокировки в go-smb2: В конечном итоге было выявлено, что блокировка в пакете go-smb2 приводила к остановке горутины финализатора, что вызывало утечку памяти.
Cyolo
- Результаты и рекомендации: Команда сообщила о найденной проблеме сообществу Go, предложив улучшить документацию по финализаторам и внедрить метрики для обнаружения медленных или заблокированных очередей финализаторов.
Статья подчеркивает важность тщательного анализа и командной работы при решении сложных проблем в программировании, а также необходимость понимания внутренних механизмов используемого языка и его инструментов.
📌 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
📘 Using Signals With Go
Статья объясняет, как в Go обрабатывать сигналы ОС с помощью пакета os/signal.
🔹 signal.Notify(ch, signals...) — подписывает канал ch на сигналы
🔹 signal.Stop(ch) — отписывает
📦 Пример:
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
<-ch
fmt.Println("Получен сигнал")
📦 Для корректного завершения (graceful shutdown) можно после SIGINT вызвать signal.Stop, остановить приём новых задач и дождаться завершения текущих.
🔗 Подробнее: https://www.calhoun.io/using-signals-with-go/
@golang_books
Статья объясняет, как в Go обрабатывать сигналы ОС с помощью пакета os/signal.
🔹 signal.Notify(ch, signals...) — подписывает канал ch на сигналы
🔹 signal.Stop(ch) — отписывает
📦 Пример:
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
<-ch
fmt.Println("Получен сигнал")
📦 Для корректного завершения (graceful shutdown) можно после SIGINT вызвать signal.Stop, остановить приём новых задач и дождаться завершения текущих.
🔗 Подробнее: https://www.calhoun.io/using-signals-with-go/
@golang_books
Каждая "карта" представляет собой ключевую концепцию или инструмент, связанный с конкурентностью в Go.
🃏 Основные "карты" конкурентности в Go
Горутины (goroutines): Лёгкие потоки, позволяющие выполнять функции параллельно.
Каналы (channels): Средство коммуникации между горутинами, обеспечивающее безопасный обмен данными.
Селекторы (select): Позволяют горутине ждать нескольких операций с каналами одновременно.
Мьютексы (mutexes): Механизм синхронизации, предотвращающий одновременный доступ к общим ресурсам.
Пулы воркеров (worker pools): Шаблон для управления группой горутин, выполняющих задачи из общей очереди.
Автор подчеркивает важность понимания этих концепций для эффективного использования конкурентности в Go. Он также обсуждает типичные ошибки и подводные камни, такие как гонки данных и блокировки, и предлагает стратегии их избегания.
Статья рекомендуется для разработчиков, стремящихся углубить свои знания в области конкурентного программирования на Go.
▪ Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
📰 mdrss — генерация RSS из Markdown
mdrss — утилита на Go для генерации RSS-лент из местных Markdown-файлов.
Полезна для блогов и автоматизированных публикаций.
🛠 Особенности:
- Конвертация .md файлов в RSS
- Простая CLI-утилита
- Гибкая настройка метаданных
📦 Пример:
mdrss -input ./posts -output feed.xml
#Go #Markdown #RSS #OpenSource
🔗 GitHub
mdrss — утилита на Go для генерации RSS-лент из местных Markdown-файлов.
Полезна для блогов и автоматизированных публикаций.
🛠 Особенности:
- Конвертация .md файлов в RSS
- Простая CLI-утилита
- Гибкая настройка метаданных
📦 Пример:
mdrss -input ./posts -output feed.xml
#Go #Markdown #RSS #OpenSource
🔗 GitHub
🛡️ Мониторинг активности пользователей Linux с psacct и acct
Утилиты psacct и acct помогают системным администраторам эффективно контролировать действия пользователей:
🔹 ac — статистика времени входа пользователей
🔹 lastcomm — история выполненных команд
🔹 sa — сводная статистика команд
🔹 last и lastb — последние успешные и неудачные попытки входа
⚙️ Установка:
# RPM (RHEL, CentOS, Fedora):
sudo yum install psacct
# Debian (Ubuntu, Linux Mint):
sudo apt install acct
🚀 Запуск службы:
sudo systemctl start psacct
sudo systemctl enable psacct
🔗 Подробнее на Tecmint
#Linux #Admin #Security #Monitoring
Утилиты psacct и acct помогают системным администраторам эффективно контролировать действия пользователей:
🔹 ac — статистика времени входа пользователей
🔹 lastcomm — история выполненных команд
🔹 sa — сводная статистика команд
🔹 last и lastb — последние успешные и неудачные попытки входа
⚙️ Установка:
# RPM (RHEL, CentOS, Fedora):
sudo yum install psacct
# Debian (Ubuntu, Linux Mint):
sudo apt install acct
🚀 Запуск службы:
sudo systemctl start psacct
sudo systemctl enable psacct
🔗 Подробнее на Tecmint
#Linux #Admin #Security #Monitoring
В свежей статье Никиты Бурова разбирается практический кейс: без шардирования, без десятков реплик и без магии облака — всего за счёт правильных оптимизаций Go‑сервис на одном MacBook Pro M3 достигает 200000 запросов в секунду с медианным P50 < 1 мс. Вот главные приёмы:
1⃣ Сводим работу «горячего» пути к минимуму
- Статический преподготовленный фид — из памяти, без БД/API.
- Ноль аллокаций — никаких new/make в горячем пути.
2⃣ net/http → fasthttp
- Быстрее TCP, буферы, заголовки.
- ×8–10 прирост RPS.
3⃣ Pool объектов + явный сброс
- sync.Pool для структур.
- Отказ от defer.
4⃣ Tюнинг GOMAXPROCS + GOGC
- GOMAXPROCS= ядра.
- GOGC=200–300.
5⃣ Профилирование pprof benchstat
Результат: один инстанс держит 200000 RPS с P50 < 1мс и P99 < 2мс.
🔗 Полная статья: https://medium.com/@nikitaburov/how-to-easily-handle-200k-rps-with-golang-8b62967a01dd
Please open Telegram to view this post
VIEW IN TELEGRAM
Как часто вы ловите себя на вопросе: «Как лучше организовать структуру репозитория Go‑проекта?» В беседах на Gopher Slack и телеграм чатах подобные вопросы возникают вновь и вновь.
Впрочем, в сети так много устаревших или чрезмерно запутанных гайдов, что порой сложно найти по-настоящему удручающе простое решение.
Одна из краеугольных идей философии Go — стремление к максимальной простоте.
Начните с малого: пишите функциональный код, не создавая сложную иерархию каталогов до тех пор, пока в этом нет реальной нужды.
Что говорит официальная документация
На сайте go.dev можно найти рекомендации от авторов языка:
«В больших проектах или монолитных приложениях бывает полезно вынести часть функциональности в поддерживающие пакеты, помещая их в каталог internal. Код внутри internal/ недоступен для стороннего импорта, что позволяет нам без опасений рефакторить API и перестраивать структуру».
Заметьте, слова — «больших» и «бывает» — подчёркнуты не случайно.
Большинству небольших или средних проектов вовсе не нужен internal/: достаточно просто не экспортировать те функции, которые не предназначены для внешнего использования.
Идея «сначала создайте internal/, потом думайте о дизайне» кажется чрезмерной. Но зачастую, разумнее сперва выпустить полезный функционал, а уже потом, по мере роста проекта, скорректировать структуру.
Что не стоит копировать вслепую
Наверняка вы слышали о репозитории «golang-standards/project-layout», который многие называют «стандартом». На деле это скорее набор идей, вокруг которых бурно дискутируют, нежели непреложное правило.
Не позволяйте чужим конвенциям диктовать ваш рабочий процесс: возможность импортировать из internal/ или раскладывать всё по папкам cmd/, pkg/ и т. д. — далеко не обязательный шаблон для каждого проекта.
Рекомендации из практики
Пакет main
Если ваш проект — это одно единственное приложение, вполне логично держать main.go в корне. Команда
go install github.com/you/project@latest
сработает без лишних телодвижений. Если же вы развиваете и библиотеку, и отдельный исполняемый файл, можно вынести main в подпапку (например, app/) — но не более того.
Каталог internal/
Применяйте его лишь в том случае, когда ваш код действительно потребляют десятки сторонних проектов. Для большинства библиотек и приложений довольно размещать «внутренние» пакеты там, где они логически принадлежат, просто не экспортируя нежелательные символы.
Каталог pkg/
Когда-то pkg/ помогал отделять библиотеки от «прочего» кода. Теперь, после появления internal/, он утратил былую нужность. Любой пакет из pkg/ можно без труда перенести в корень, не нарушив логику проекта.
Утилиты util/, common/, shared/
«Утильные» каталоги зачастую превращаются в свалку беспорядочных функций. Лучше дать такому набору ясное название или разместить функции непосредственно рядом с их точкой использования.
Не множьте пакеты без надобности
В Go несколько файлов в одном пакете — не проблема. Не выделяйте новый пакет ради нескольких строк кода: это усложняет навигацию и повышает риск непреднамеренных циклических зависимостей.
Примеры
🔸 github.com/fortio/ — сервер, библиотеки и CLI в одном репозитории
🔸 github.com/fortio/proxy — отдельный HTTP‑прокси
🔸 github.com/fortio/multicurl — консольный инструмент
🔸 github.com/fortio/terminal — два пакета + CLI
🔸 github.com/grol-io/grol — Go с WebAssembly
Сосредоточтесь на действительно важных вещах — написании кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Как перейти с Rails на Go — и не пожалеть
Переход от Ruby on Rails к Go может казаться прыжком в холодную воду — но с правильным подходом это апгрейд, а не стресс.
Вот ключевые инсайты из реального опыта миграции:
🔧 Почему вообще переходят с Rails?
Производительность: Go в среднем быстрее, меньше расходует ресурсов
Статика > магия: в Go меньше "магии", проще отлаживать и поддерживать
Конкурентность встроена: goroutines + каналы = мощная модель параллелизма
🛠️ Сложности при переходе:
Меньше фреймворка — больше архитектуры
Rails даёт всё из коробки. В Go нужно самому продумывать маршрутизацию, DI, структуры.
Типы и компилятор строже
Go требует строгости. Типы и структура — сначала боль, потом кайф.
Нет ActiveRecord
ORMs в Go проще, но требуют больше явности (например, sqlc, gorm, ent).
✅ Как сделать переход мягче:
Разделяй монолит: выноси куски бизнес-логики в gRPC / REST-сервисы
Начни с простых сервисов (например, нотификации, аналитика)
Используй Encore.dev — как фреймворк, чтобы быстрее стартовать в Go (автор статьи — их инженер 😄)
📌 Вывод:
"С Go ты платишь заранее — за читаемость, предсказуемость и контроль. А потом выигрываешь в производстве."
Если тебе важна скорость, контроль и масштабируемость — Go может стать лучшим решением, чем Rails.
Читать
Переход от Ruby on Rails к Go может казаться прыжком в холодную воду — но с правильным подходом это апгрейд, а не стресс.
Вот ключевые инсайты из реального опыта миграции:
🔧 Почему вообще переходят с Rails?
Производительность: Go в среднем быстрее, меньше расходует ресурсов
Статика > магия: в Go меньше "магии", проще отлаживать и поддерживать
Конкурентность встроена: goroutines + каналы = мощная модель параллелизма
🛠️ Сложности при переходе:
Меньше фреймворка — больше архитектуры
Rails даёт всё из коробки. В Go нужно самому продумывать маршрутизацию, DI, структуры.
Типы и компилятор строже
Go требует строгости. Типы и структура — сначала боль, потом кайф.
Нет ActiveRecord
ORMs в Go проще, но требуют больше явности (например, sqlc, gorm, ent).
✅ Как сделать переход мягче:
Разделяй монолит: выноси куски бизнес-логики в gRPC / REST-сервисы
Начни с простых сервисов (например, нотификации, аналитика)
Используй Encore.dev — как фреймворк, чтобы быстрее стартовать в Go (автор статьи — их инженер 😄)
📌 Вывод:
"С Go ты платишь заранее — за читаемость, предсказуемость и контроль. А потом выигрываешь в производстве."
Если тебе важна скорость, контроль и масштабируемость — Go может стать лучшим решением, чем Rails.
Читать
Forwarded from Golang
🌟Cozystack – бесплатный PaaS-фреймворк для создания интеллектуальной системы серверов.
⚡️С его помощью вы можете превратить ваши сервера в управляемое облако с примитивами Kubernetes, базами данных, виртуальными машинами, балансировщиками и кэшем через простой REST API.
🔥Сервис идеально подходит для частных облаков и экономичных dev-сред, имеет открытую архитектуру, гибкую интеграцию и встроенный мониторинг данных.
🤖GitHub
@golang_google
⚡️С его помощью вы можете превратить ваши сервера в управляемое облако с примитивами Kubernetes, базами данных, виртуальными машинами, балансировщиками и кэшем через простой REST API.
🔥Сервис идеально подходит для частных облаков и экономичных dev-сред, имеет открытую архитектуру, гибкую интеграцию и встроенный мониторинг данных.
🤖GitHub
@golang_google
📝 Как создать API на Go с помощью Huma
📈 Пошаговое руководство от Zuplo (апрель 2025)
1. Создание проекта на Go с Huma (OpenAPI + валидация + структуры данных)
2. Интеграция с MongoDB
3. Запуск локального API
4. Деплой API
5. Создание и управление через Zuplo
6. Аутентификация через API-ключи
✅ Huma — минималистичный Go-фреймворк с автоматической OpenAPI-спецификацией и удобной валидацией
📚 Читать: How to Build an API with Go and Huma
@golang_books
📈 Пошаговое руководство от Zuplo (апрель 2025)
1. Создание проекта на Go с Huma (OpenAPI + валидация + структуры данных)
2. Интеграция с MongoDB
3. Запуск локального API
4. Деплой API
5. Создание и управление через Zuplo
6. Аутентификация через API-ключи
✅ Huma — минималистичный Go-фреймворк с автоматической OpenAPI-спецификацией и удобной валидацией
📚 Читать: How to Build an API with Go and Huma
@golang_books